package com.course02.order_backend.utils.LXY;

import cn.hutool.jwt.JWT;
import cn.hutool.jwt.JWTUtil;
import cn.hutool.jwt.JWTValidator;
import cn.hutool.jwt.signers.JWTSigner;
import cn.hutool.jwt.signers.JWTSignerUtil;

import java.util.Date;

/**
 * JWT工具类 - Hutool实现
 * @author wozhe
 */
public class JwtUtils {
    /**
     * 这个👇KEY好像没什么意义？只能自己乱加吗？
     */
    private static final byte[] KEY = "YLWTSMTJFYHDCMGSCWHSSYBZSDKC".getBytes();
    private static final JWTSigner SIGNER = JWTSignerUtil.hs256(KEY);

    /**
     * 生成token
     * @param pub  负载
     * @param expiresTime 过期时间（单位 毫秒）
     * @return token
     */
    public static String sign(String pub, Long expiresTime) {
        return JWT.create()
                // 使用 setPayload 而不是 withIssuer
                .setPayload("iss", pub)
                .setExpiresAt(new Date(System.currentTimeMillis() + expiresTime))
                .setSigner(SIGNER)
                .sign();
    }

    /**
     * 校验token
     */
    public static boolean verify(String token) {
        try {
            // 验证时间
            JWTValidator.of(token).validateDate();
            // 验证签名
            return JWTUtil.verify(token, SIGNER);
        } catch (Exception e) {
            return false;
        }
    }

    /**
     * 从token中获取负载
     * @param token 令牌
     * @return 保存的负载
     */
    public static String getClaim(String token) {
        JWT jwt = JWTUtil.parseToken(token);
        return (String) jwt.getPayload("iss");
    }
}
